home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / sys / sysTestCall.c < prev    next >
C/C++ Source or Header  |  1992-12-18  |  5KB  |  220 lines

  1. /* 
  2.  * sysTestCall.c --
  3.  *
  4.  *    These routines do direct console I/O.
  5.  *    These routines are so close to obsolete they should be removed.
  6.  *    However, I tried that and it broke initsprite.
  7.  *
  8.  * Copyright (C) 1985 Regents of the University of California
  9.  * All rights reserved.
  10.  */
  11.  
  12. #ifndef lint
  13. static char rcsid[] = "$Header: /cdrom/src/kernel/Cvsroot/kernel/sys/sysTestCall.c,v 9.5 91/03/30 17:21:16 mendel Exp $ SPRITE (Berkeley)";
  14. #endif not lint
  15.  
  16. #include <sprite.h>
  17. #include <sysSysCall.h>
  18. #include <sysTestCall.h>
  19. #include <sys.h>
  20. #include <dbg.h>
  21. #include <vm.h>
  22. #include <machMon.h>
  23. #include <stdio.h>
  24.  
  25. struct test_args {
  26.     int argArray[SYS_MAX_ARGS];
  27. };
  28.  
  29.  
  30. /*
  31.  * ----------------------------------------------------------------------------
  32.  *
  33.  * Test_PrintOut --
  34.  *
  35.  *      Does a printf that will work during boot before everything
  36.  *    else gets initialized.  This is used only by initsprite, as far
  37.  *    as I can tell.
  38.  *
  39.  * Results:
  40.  *      None.
  41.  *
  42.  * Side effects:
  43.  *      Outputs data.
  44.  *
  45.  * ----------------------------------------------------------------------------
  46.  */
  47.  
  48. int 
  49. Test_PrintOut(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
  50.     int arg0; 
  51.     int arg1; 
  52.     int arg2; 
  53.     int arg3; 
  54.     int arg4; 
  55.     int arg5; 
  56.     int arg6;
  57.     int arg7; 
  58.     int arg8; 
  59.     int arg9;
  60. {
  61.     struct test_args args;
  62.     struct {
  63.     int     arg;
  64.     int     mapped;
  65.     int    numBytes;
  66.     } nargs[SYS_MAX_ARGS];
  67.     int        len;
  68.     int        i;
  69.     char    *string;
  70.  
  71.     args.argArray[0] = arg0;
  72.     args.argArray[1] = arg1;
  73.     args.argArray[2] = arg2;
  74.     args.argArray[3] = arg3;
  75.     args.argArray[4] = arg4;
  76.     args.argArray[5] = arg5;
  77.     args.argArray[6] = arg6;
  78.     args.argArray[7] = arg7;
  79.     args.argArray[8] = arg8;
  80.     args.argArray[9] = arg9;
  81.  
  82.     Vm_MakeAccessible(VM_READONLY_ACCESS, 1024, (Address) (args.argArray[0]), 
  83.                       &len, (Address *) &(nargs[0].arg));
  84.     if (len == 0) {
  85.     return(FAILURE);
  86.     }
  87.     nargs[0].numBytes = len;
  88.  
  89.     nargs[0].mapped = TRUE;
  90.     for (i = 1; i < SYS_MAX_ARGS; i++) {
  91.     nargs[i].mapped = FALSE;
  92.     }
  93.     string = (char *) nargs[0].arg;
  94.     i = 1;
  95.     while (*string != '\0') {
  96.     if (*string != '%') {
  97.         string++;
  98.         continue;
  99.     }
  100.     string++;
  101.     if (*string == 's') {
  102.         Vm_MakeAccessible(VM_READONLY_ACCESS, 1024,
  103.                         (Address) args.argArray[i], &len,
  104.                   (Address *) &(nargs[i].arg));
  105.         if (len == 0) {
  106.         for (i = 0; i < SYS_MAX_ARGS; i++) {
  107.             if (nargs[i].mapped) {
  108.             Vm_MakeUnaccessible((Address) (nargs[i].arg),
  109.                 nargs[i].numBytes);
  110.             }
  111.         }
  112.         return(FAILURE);
  113.         }
  114.  
  115.         nargs[i].mapped = TRUE;
  116.         nargs[i].numBytes = len;
  117.     } else {
  118.         nargs[i].arg = args.argArray[i];
  119.     }
  120.     string++;
  121.     i++;
  122.     }
  123.     printf((char *) nargs[0].arg, nargs[1].arg, nargs[2].arg,
  124.         nargs[3].arg, nargs[4].arg, nargs[5].arg, nargs[6].arg,
  125.         nargs[7].arg, nargs[8].arg, nargs[9].arg);
  126.     for (i = 0; i < SYS_MAX_ARGS; i++) {
  127.     if (nargs[i].mapped) {
  128.         Vm_MakeUnaccessible((Address) (nargs[i].arg), nargs[i].numBytes);
  129.     }
  130.     }
  131.     return(0);
  132. }
  133.  
  134. /*
  135.  * ----------------------------------------------------------------------------
  136.  *
  137.  * Test_GetLine --
  138.  *
  139.  *      Gets data from console.  I'm not sure this is actually used.
  140.  *
  141.  * Results:
  142.  *      The string.
  143.  *
  144.  * Side effects:
  145.  *      Gets a string.
  146.  *
  147.  * ----------------------------------------------------------------------------
  148.  */
  149. int 
  150. Test_GetLine(string, length)
  151.     char    *string;
  152.     int        length;
  153. {
  154. #ifdef sun4c
  155.     printf("Test_GetLine() doesn`t work on sun4c\n");
  156.     return (FAILURE);
  157. #else
  158.     int        i, numBytes;
  159.     char     *realString;
  160.  
  161.     printf("Obsolete Test_GetLine() called\n");
  162.     Vm_MakeAccessible(VM_OVERWRITE_ACCESS, length, (Address) string,
  163.               &numBytes, (Address *) &realString);
  164.  
  165.     Mach_MonGetLine(1);
  166.     i = 0;
  167.     realString[i] = Mach_MonGetNextChar();
  168.     while (i < length - 1 && realString[i] != '\0') {
  169.     i++;
  170.     realString[i] = Mach_MonGetNextChar();
  171.     }
  172.     realString[i] = '\0';
  173.  
  174.     Vm_MakeUnaccessible((Address) realString, numBytes);
  175.  
  176.     return(SUCCESS);
  177. #endif
  178. }
  179.  
  180. /*
  181.  * ----------------------------------------------------------------------------
  182.  *
  183.  * Test_GetChar --
  184.  *
  185.  *      Gets data from console.  I'm not sure this is actually used.
  186.  *
  187.  * Results:
  188.  *      The character.
  189.  *
  190.  * Side effects:
  191.  *      Gets a character.
  192.  *
  193.  * ----------------------------------------------------------------------------
  194.  */
  195. int 
  196. Test_GetChar(charPtr)
  197.     char    *charPtr;
  198. {
  199. #ifdef sun4c
  200.     printf("Test_GetChar() doesn`t work on sun4c\n");
  201.     return (FAILURE);
  202. #else
  203.     char     *realCharPtr;
  204.     int        numBytes;
  205.  
  206.     printf("Obsolete Test_GetChar() called\n");
  207.     Vm_MakeAccessible(VM_OVERWRITE_ACCESS, 1, (Address) charPtr,
  208.               &numBytes, (Address *) &realCharPtr);
  209.     if (numBytes == 0) {
  210.     return(SYS_ARG_NOACCESS);
  211.     }
  212.     *realCharPtr = Mach_MonGetNextChar();
  213.  
  214.     printf("%c", *realCharPtr);
  215.  
  216.     Vm_MakeUnaccessible((Address) realCharPtr, numBytes);
  217.     return(SUCCESS);
  218. #endif
  219. }
  220.